Beginner Cracking Tutorial vol 1 by flag eRRatum

Target     : WinSolo Freeware Version
Size       : 35.1 KB
URL        : http://home.worldonline.dk/~andersa/download/index.htm
Protection : Nag Screen
Audience   : Absolute beginner cracker 
Tools      : Wdasm (versi terakhir : 8.93), SoftIce (versi terakhir : 4.05), 
             HexEditor yang baik (Download semua di http://protools.cjb.net / http://playtools.cjb.net)

Essay      :

Oke, pertama jalankan WinSolo, kamu akan ketemu dengan message box, dengan tulisan : "FYI. A more recent ... ". Message box ini disebut dengan nag screen, dan kita ngak suka donk dikasih pesen pesen gitu setiap kali jalanin program ini ? Oke, kita akan meng"hapus" nag screen ini.

Tutorial gua kali ini, akan dibagi dalam 2 tahap, yakni deadlist approach, dan live approach.
Deadlist, dengan menggunakan disasmbler seperti Wdasm/IDA (di sini, kita akan pake WDasm) dan Live dengan menggunakan Softice.


DEADLIST APPROACH :

Jalankan Wdasm, disasm file WinSolo.exe, tunggu sampe selesai. Klik kotak string reference, string reference mengandung SETIAP kata/kalimat yang terdapat dalam program, yang kalau kamu sering membuat program termasuk dalam variabel konstan. Inget, pesan nag screen tadi ? , cari di string reference box tadi :

String Resource ID=00002: "WinSolo"
"         (((((                "
" "
"*.exe"
"."
"\!ABS"
"\"
"Boot"
"Browse for application"
"Explorer.exe"
"FYI.  A more recent version of "  --->>> Ini yang kita cari !!!
"KERNEL32.DLL"
"MMTASK.TSK"
"MPREXE.EXE"
"MSGSRV32.EXE"
"PDT"

Double clik di text tersebut, kamu akan dibawa ke sini :

* Referenced by a CALL at Address:
|:004067DD   
|
:00401100 64A100000000            mov eax, dword ptr fs:[00000000]
:00401106 6AFF                    push FFFFFFFF
:00401108 6888DE4000              push 0040DE88
:0040110D 50                      push eax
:0040110E 64892500000000          mov dword ptr fs:[00000000], esp
:00401115 83EC4C                  sub esp, 0000004C
:00401118 53                      push ebx
:00401119 56                      push esi
:0040111A 6A00                    push 00000000
:0040111C E8BF530000              call 004064E0
:00401121 8D88AB2788CA            lea ecx, dword ptr [eax+CA8827AB]
:00401127 B807452EC2              mov eax, C22E4507
:0040112C F7E9                    imul ecx
:0040112E 03D1                    add edx, ecx
:00401130 83C404                  add esp, 00000004
:00401133 C1FA10                  sar edx, 10
:00401136 8BC2                    mov eax, edx
:00401138 C1E81F                  shr eax, 1F
:0040113B 03D0                    add edx, eax
:0040113D 83FAFC                  cmp edx, FFFFFFFC
:00401140 7E05                    jle 00401147
:00401142 83FA78                  cmp edx, 00000078
:00401145 7E14                    jle 0040115B

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401140(C)
|
:00401147 6A40                    push 00000040

* Possible StringData Ref from Data Obj ->"WinSolo" -->> Caption nag screen
                                  |
:00401149 6850114100              push 00411150

* Possible StringData Ref from Data Obj ->"FYI.  A more recent version of "
                                        ->"this program MAYBE available from "
                                        ->"http://procode.com.au/.  Otherwise "
                                        ->"the date setting on your computer "
                                        ->"is possibly wrong."
                                  |
:0040114E 68B4104100              push 004110B4
:00401153 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0195h -->> tampilkan dengan fungsi Messageboxa
                                  |
:00401155 FF1570644100            Call dword ptr [00416470]


Seperti yang kamu lihat, pertama program akan meng-save title/caption dari nag screen, terus dia akan meng-save ISI dari nag screen tersebut, dan kemudian baru menampilkannya dengan fungsi API : MessageboxA.

Lihat, ke atas di offset : 401147, ada jump reference dari 401140, lihat ke baris 401140, berarti ada 2 kemungkinan program bisa mencapai nag screen generating ini, pertama dari loncatan di 401140, atau kedua, di 401140 dia ngak loncat, dan di 401145 dia juga ngak loncat. Perhatikan baris 401145 : jle 0040115B, jelas kalau disini program "loncat", maka program ngak akan pernah menyentuh nag screen generating. Jadi ada berbagai cara untuk "melompati" rutin pembuatan nag screen tersebut, gua akan tunjukkan beberapa caranya :

1. Pada baris 401140, NOP instruksi "jle 00401147", jadi kita harus ganti opcodes (kode untuk isntruksi asm) dari "jle 00401147" dari 7E05 menjadi 9090 (opcode untuk NOP, NOP) inget NOP harus 2 kali, karena instruksi NOP opcodesnya hanya terdiri dari 1 byte, sedang jle 00401147 terdiri dari 2 bytes. NOP adalah instruksi assembly yang tidak melakukan apa apa (NOP = No Operation), jadi sebenarnya ngak ada gunanya, cuman sebagai pengisi bytes aja.

Jangan lupa pada baris 401145, kita harus merubah jle 40115B, menjadi JMP 40115B, karena kita harus "loncat" di offset tersebut. Ganti opcodes dari 7E14, menjadi EB14 (opcodes untuk JMP 40115B).

2. Cara kedua adalah dengan meng-NOP fungsi API Messageboxa, ganti opcodes dari offset 401155, dari FF1570644100 menjadi 909090909090, dengan begitu fungsi Messageboxa tersebut tidak pernah dipanggil dan nag screen tidak pernah dibentuk.

3. Cara lebih baik, adalah dengan merubah offset 401140, dari instruksi JLE 401147, menjadi JMP 40115B, dengan begitu kita hanya perlu merubah 1 kali saja, yakni dengan mengganti opcodes 7E05 menjadi EB14.


Disini, gua akan pake cara ketiga. Sekarang, gimana cara kita ngerubah opcodesnya ? gampang, jalankan hexeditor. Sekarang kamu tinggal masukin offset yang mengandung opcodes yang pengen di rubah di Goto Offset (CTRL-G di HexWorkshop). Nah, sekarang timbul masalah. Offset 401140 adalah Virtual Address/Virtual Offset, alias alamat offset di memory, yang kita butuh bukan alamat offset di memory, tapi alamat offset pada file. Cara termudah untuk mengetahui alamat offset di file adalah dengan melihat pada status bar (bagian paling bawah dari Wdasm), dan lihat ketika kita menghighlight (mengklik) pada offset : 401140, ada tulisan offset = ... 

Cara lain adalah : lihat pada permulaan hasil deadlisting kamu :

Disassembly of File: WinSolo.exe
Code Offset = 00000400, Code Size = 0000D200
Data Offset = 0000F600, Data Size = 00003A00

Number of Objects = 0005 (dec), Imagebase = 00400000h

   Object01: .text    RVA: 00001000 Offset: 00000400 Size: 0000D200 Flags: 60000020

Dari info ini kita bisa nyari Offset pada file. Caranya : 401140-Imagebas-RVA.text+Code Offset, sehingga 401140h-400000h-1000h+400h = 540h.


Ganti bagian yang diinginkan, dan save. Jalankan WinSolo, nag screen sudah ngak ada.


LIVE APPROACH

Cara dengan live approach menggunakan SoftIce/debugger lainnya, secara teori lebih sedikit membutuhkan waktu, tapi butuh pemahaman yang lebih baik terhadap assembly/hal hal teknis lainnya.

Sekarang kita musti tahu, ada beberapa cara yang *umum* digunakan untuk menggenerate sebuah messagebox untuk dijadikan nagscreen, yakni dengan menggunakan Windows API dibawah ini :

MessageBoxA
MessageBoxExA
MessageBeep 

Ingat, ini adalah yang *umum* bukan selalu, ada lusinan cara lainnya untuk menggenerate windows. Sebelum ini, anda harus sudah mensetup softice anda, baca tutorial gua yang pertama tentang mensetup softice.

Oke, sekarang masuk ke Softice dengan mengetikkan CTRL-D. Ketikkan BPX Messageboxa | Enter, keluar dari softice dengan mengetikkan CTRL-D,  jalankan winsolo, kamu akan break disini :

0177:BFF5412E  55                  PUSH    EBP -->> kamu break disini !!!
0177:BFF5412F  8BEC                MOV     EBP,ESP
0177:BFF54131  6A00                PUSH    00
0177:BFF54133  FF7514              PUSH    DWORD PTR [EBP+14]
0177:BFF54136  FF7510              PUSH    DWORD PTR [EBP+10]
0177:BFF54139  FF750C              PUSH    DWORD PTR [EBP+0C]
0177:BFF5413C  FF7508              PUSH    DWORD PTR [EBP+08]
0177:BFF5413F  E8D8ECFFFF          CALL    USER32!MessageBoxExA
0177:BFF54144  5D                  POP     EBP
0177:BFF54145  C21000              RET     0010

Perhatikan ini adalah masih di kernelnya windows, lihat nama modul : User32... Ketikkan F12 sekali. F12, adalah shortcut yang mengtrace sampe ketemu dengan instruksi RET, kamu akan kembali ke windows, klik OK, kamu akan balik ke SoftIce disini :

0177:0040113B  03D0                ADD     EDX,EAX
0177:0040113D  83FAFC              CMP     EDX,-04
0177:00401140  7E05                JLE     00401147
0177:00401142  83FA78              CMP     EDX,78
0177:00401145  7E14                JLE     0040115B
0177:00401147  6A40                PUSH    40
0177:00401149  6850114100          PUSH    00411150
0177:0040114E  68B4104100          PUSH    004110B4
0177:00401153  6A00                PUSH    00
0177:00401155  FF1570644100        CALL    [USER32!MessageBoxA]
0177:0040115B  8B4C2470            MOV     ECX,[ESP+70] -->> kamu disini !!!
0177:0040115F  8B54246C            MOV     EDX,[ESP+6C]
0177:00401163  8B442468            MOV     EAX,[ESP+68]
0177:00401167  51                  PUSH    ECX

Perhatikan bahwa ini adalah persis sama dengan deadlist diatas, kamu bisa mengcracknya dengan cara yang sama seperti diatas. Kalau kamu pengen ngeliat informasi mengenai imagebase, .text RVA, kamu ngak perlu cape cape mengdeadlist, cukup jalankan program program PE EDitor, kamu bisa cari banyak program kaya gini di http://protools.cjb.net / http://playtools.cjb.net

------------
End of Essay
